#!/usr/bin/env bash
set -euo pipefail

# 用法:
#   ./run.sh                # 使用现有 .env (若不存在自动创建示例, 需手动替换 JWT) 启动 MCP (stdio)
#   ./run.sh <JWT>          # 同上 + 写入 JWT
#   ./run.sh http [JWT]     # 启动 HTTP REST 接口 (FastAPI) 可选传 JWT
# 环境变量优先级: 显式参数 > 已存在 .env > 当前环境导出

PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$PROJECT_DIR"

if [ ! -d .venv ]; then
  echo "[*] 创建虚拟环境 .venv" >&2
  python3 -m venv .venv
fi
source .venv/bin/activate

if [ "${SKIP_PIP_INSTALL:-0}" = "1" ]; then
  echo "[*] 跳过依赖安装 (SKIP_PIP_INSTALL=1)" >&2
else
  echo "[*] 安装/更新依赖" >&2
  pip install -r requirements.txt >/dev/null
fi

MODE="mcp"
JWT_ARG=""
if [ "${1:-}" = "http" ]; then
  MODE="http"
  shift || true
fi
JWT_ARG="${1:-}"

if [ ! -f .env ]; then
  echo "[*] 生成 .env 文件" >&2
  cat > .env <<'EOF'
TB_HOST=services.skywant.cn
TB_PORT=8080
TB_JWT=
EOF
fi

if [ -n "$JWT_ARG" ]; then
  # 去掉可能的换行与前后空格
  CLEAN_JWT="$(echo "$JWT_ARG" | sed 's/^ *//;s/ *$//')"
  # 写入 .env (保持其他变量不变)
  if grep -q '^TB_JWT=' .env; then
    sed -i "s#^TB_JWT=.*#TB_JWT=$CLEAN_JWT#" .env
  else
    echo "TB_JWT=$CLEAN_JWT" >> .env
  fi
  echo "[*] 已写入提供的 JWT 到 .env" >&2
fi

echo "[*] 使用的配置:" >&2
grep -E 'TB_HOST|TB_PORT|TB_JWT' .env | sed 's/TB_JWT=.*/TB_JWT=***masked***/' >&2

if [ "$MODE" = "http" ]; then
  echo "[*] 以 HTTP 模式启动 FastAPI (端口8090)" >&2
  exec uvicorn api_server:app --host 0.0.0.0 --port 8090
else
  echo "[*] 启动 MCP ThingsBoard 服务 (Ctrl+C 退出)" >&2
  exec python server.py
fi
